﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Controllers;
using GestorDeFlotasDesktop.Listados;

namespace GestorDeFlotasDesktop
{
    public partial class RendirViajes : Form
    {
        public RendirViajes()
        {
            InitializeComponent();
        }

        #region Propiedades

        private Chofer _ChoferSeleccionado;
        public Chofer ChoferSeleccionado
        {
            get { return _ChoferSeleccionado; }
            set
            {
                _ChoferSeleccionado = value;
                if (value != null)
                    txtChofer.Text = _ChoferSeleccionado.Chofer_Dni + " " + _ChoferSeleccionado.Chofer_Nombre + " " + _ChoferSeleccionado.Chofer_Apellido;
            }
        }

        private Turno _TurnoSeleccionado;
        public Turno TurnoSeleccionado
        {
            get { return _TurnoSeleccionado; }
            set
            {
                _TurnoSeleccionado = value;
                if (value != null)
                    txtTurno.Text = _TurnoSeleccionado.Turno_Descripcion;
            }
        }

        private const int registrosPorPagina = 10;

        #endregion

        private void btnSeleccionarCliente_Click(object sender, EventArgs e)
        {
            var lstChoferes = new lstChoferes { operacion = Operacion.Seleccion, frmRendirViajes = this, frm = "rendirViajes" };
            lstChoferes.Show();
        }

        private void Facturar_Load(object sender, EventArgs e)
        {
            CargarGrilla();
        }

        //private void CargarGrilla()
        //{
        //   gvw.AutoGenerateColumns = false;
           
        //    var colId = new DataGridViewTextBoxColumn
        //    {
        //        DataPropertyName = "Viaje_Fecha",
        //        Name = "Viaje_Fecha",
        //        HeaderText = "Fecha",
        //        ReadOnly = true,
        //        Width = 120
        //    };
        //    gvw.Columns.Add(colId);

        //    var colRecaudacion = new DataGridViewTextBoxColumn
        //    {
        //        DataPropertyName = "Viaje_Recaudacion",
        //        Name = "Viaje_Recaudacion",
        //        HeaderText = "Consumo",
        //        ReadOnly = true,
        //        Width = 60
        //    };
        //    gvw.Columns.Add(colRecaudacion);

        //    var colChofer = new DataGridViewTextBoxColumn
        //    {
        //        DataPropertyName = "Viaje_Chofer_DNI",
        //        Name = "Viaje_Chofer_DNI",
        //        HeaderText = "Chofer DNI",
        //        ReadOnly = true,
        //        Width = 100
        //    };
        //    gvw.Columns.Add(colChofer);

        //    var colAuto = new DataGridViewTextBoxColumn
        //    {
        //        DataPropertyName = "Viaje_Auto_Patente",
        //        Name = "Viaje_Auto_Patente",
        //        HeaderText = "Auto Patente",
        //        ReadOnly = true,
        //        Width = 100
        //    };
        //    gvw.Columns.Add(colAuto);


        //}

        private void CargarGrilla()
        {
            gvw.AutoGenerateColumns = false;

            var colFecha = new DataGridViewTextBoxColumn
            {
                DataPropertyName = "Viaje_Fecha",
                Name = "Viaje_Fecha",
                HeaderText = "Fecha",
                ReadOnly = true,
                Width = 120
            };
            gvw.Columns.Add(colFecha);

            var colTurno = new DataGridViewTextBoxColumn
            {
                DataPropertyName = "Viaje_Turno",
                Name = "Viaje_Turno",
                HeaderText = "Turno",
                ReadOnly = true,
                Width = 120
            };
            gvw.Columns.Add(colTurno);

            var colChofer = new DataGridViewTextBoxColumn
            {
                DataPropertyName = "Viaje_Chofer",
                Name = "Viaje_Chofer",
                HeaderText = "Chofer",
                ReadOnly = true,
                Width = 120
            };
            gvw.Columns.Add(colChofer);

            var colAuto = new DataGridViewTextBoxColumn
            {
                DataPropertyName = "Viaje_Auto",
                Name = "Viaje_Auto",
                HeaderText = "Auto",
                ReadOnly = true,
                Width = 120
            };
            gvw.Columns.Add(colAuto);

            var colImporte = new DataGridViewTextBoxColumn
            {
                DataPropertyName = "Viaje_Importe",
                Name = "Viaje_Importe",
                HeaderText = "Importe",
                ReadOnly = true,
                Width = 120
            };
            gvw.Columns.Add(colImporte);

        }

        private void CalcularCantidadRegistros()
        {
            var cantidadRegistros = RendicionController.ObtenerCantidad(_ChoferSeleccionado.Chofer_Id, _TurnoSeleccionado.Turno_Id, dtpFecha.Value.ToString("yyyy-MM-dd"));

            var cantidadPaginas = cantidadRegistros / registrosPorPagina;
            if (cantidadRegistros % registrosPorPagina > 0) // if remainder is more than  zero 
            {
                cantidadPaginas += 1;
            }

            lblCantidadPaginasTotales.Text = cantidadPaginas.ToString();
        }

        private void ActualizarGrilla(int pagina)
        {
            lblCartelDe.Visible = true;
            lblPagina.Visible = true;
            lblCantidadPaginasTotales.Visible = true;
            btnUltimaPagina.Enabled = true;
            btnProximaPagina.Enabled = true;
            btnPaginaAnterior.Enabled = true;
            btnPrimeraPagina.Enabled = true;

            lblCartelPagina.Text = "Mostrando página";

            gvw.DataSource = RendicionController.ObtenerViajes(_ChoferSeleccionado.Chofer_Id, _TurnoSeleccionado.Turno_Id, dtpFecha.Value.ToString("yyyy-MM-dd"));

            var cantidadPaginas = Convert.ToInt32(lblCantidadPaginasTotales.Text);

            if (cantidadPaginas == 1)
            {
                btnUltimaPagina.Enabled = false;
                btnProximaPagina.Enabled = false;
                btnPaginaAnterior.Enabled = false;
                btnPrimeraPagina.Enabled = false;
            }
            else if (cantidadPaginas == 0)
            {
                btnUltimaPagina.Enabled = false;
                btnProximaPagina.Enabled = false;
                btnPaginaAnterior.Enabled = false;
                btnPrimeraPagina.Enabled = false;

                lblCartelDe.Visible = false;
                lblPagina.Visible = false;
                lblCantidadPaginasTotales.Visible = false;

                lblCartelPagina.Text = "No hay registros disponibles";
            }
            else
            {
                if (lblPagina.Text == lblCantidadPaginasTotales.Text)
                {
                    btnUltimaPagina.Enabled = false;
                    btnProximaPagina.Enabled = false;
                }
                else if (lblPagina.Text == "1")
                {
                    btnPrimeraPagina.Enabled = false;
                    btnPaginaAnterior.Enabled = false;
                }
            }
        }

        private bool validar() 
        {
            var valido = true;
            if (string.IsNullOrEmpty(txtChofer.Text))
            {
                errProvider.SetError(btnSeleccionarChofer, "Debe ingresar Chofer");
                valido = false;
            }
            else
            {
                errProvider.SetError(btnSeleccionarChofer, "");
            }

            if (string.IsNullOrEmpty(txtTurno.Text))
            {
                errProvider.SetError(btnSeleccionarTurno, "Debe ingresar Turno");
                valido = false;
            }
            else
            {
                errProvider.SetError(btnSeleccionarTurno, "");
            }

            if(valido)
                if (RendicionController.ValidarRendicion(_ChoferSeleccionado.Chofer_Id, _TurnoSeleccionado.Turno_Id, dtpFecha.Value.ToString("yyyy-MM-dd")))
                {
                    errProvider.SetError(btnRendir, "La Rendicion ya fue realizada");
                    valido = false;
                }
                else
                {
                    errProvider.SetError(btnRendir, "");
                }

            return valido;
        }

        private void btnRendir_Click(object sender, EventArgs e)
        {
            decimal importe = 0;
            
            if (validar())
            {
                importe =  RendicionController.ObtenerRendicionTotal(_ChoferSeleccionado.Chofer_Id, _TurnoSeleccionado.Turno_Id, dtpFecha.Value.ToString("yyyy-MM-dd"));
                lblTotal.Text = "$" + importe;
                lblTextoTotal.Visible = true;
                lblTotal.Visible = true;
                
                CalcularCantidadRegistros();
                lblPagina.Text = "1";
                ActualizarGrilla(Convert.ToInt32(lblPagina.Text));

                RendicionController.Agregar(_ChoferSeleccionado.Chofer_Id, _TurnoSeleccionado.Turno_Id, dtpFecha.Value.ToString("yyyy-MM-dd"),importe.ToString().Replace(',','.'));
                
                MessageBox.Show("La rendicion fue realizada con éxito");
            }
            
        }

        #region Paginador
        private void btnProximaPagina_Click(object sender, EventArgs e)
        {
            var pagina = Convert.ToInt32(lblPagina.Text);
            pagina++;
            lblPagina.Text = pagina.ToString();
            ActualizarGrilla(pagina);
        }

        private void btnPaginaAnterior_Click(object sender, EventArgs e)
        {
            var pagina = Convert.ToInt32(lblPagina.Text);
            pagina--;
            lblPagina.Text = pagina.ToString();
            ActualizarGrilla(pagina);
        }

        private void btnUltimaPagina_Click(object sender, EventArgs e)
        {
            lblPagina.Text = lblCantidadPaginasTotales.Text;
            ActualizarGrilla(Convert.ToInt32(lblPagina.Text));
        }

        private void btnPrimeraPagina_Click(object sender, EventArgs e)
        {
            lblPagina.Text = "1";
            ActualizarGrilla(Convert.ToInt32(lblPagina.Text));
        }
        #endregion

        private void btnSeleccionarTurno_Click(object sender, EventArgs e)
        {
            var lstTurnos = new lstTurnos { operacion = Operacion.Seleccion, frmRendirViajes = this, frm = "rendirViajes" };
            lstTurnos.Show();
        }
    }
}
